package utilities;
import models.Coefficient;
import models.IntegerCoefficient;
import models.Polynomial;
import models.RealCoefficient;
import models.TypeOfCoefficient;
public class Utilities {
public static double round(double value, int places) {
if (places < 0)
throw new IllegalArgumentException();
long factor = (long) Math.pow(10, places);
value = value * factor;
long tmp = Math.round(value);
return (double) tmp / factor;
}
public static int maxDegree(final int a, final int b) {
if (a > b) {
return a;
} else {
return b;
}
}
public static String toString(Polynomial poli) {
String ret = "";
if ((poli.getCoefficient()[0].getType() == TypeOfCoefficient.integer)) {
System.out.println("intreg");
if (poli.getDegree() > 0) {
if (((IntegerCoefficient) poli.getCoefficient()[poli.getDegree()]).getCoefficient() == 1) {
ret = "" + "X^" + poli.getDegree();
} else {
if (((IntegerCoefficient) poli.getCoefficient()[poli.getDegree()]).getCoefficient() == -1) {
ret = "" + "-X^" + poli.getDegree();
} else {
ret = "" + ((IntegerCoefficient) poli.getCoefficient()[poli.getDegree()]).getCoefficient()
+ "X^" + poli.getDegree();
}
}
}
for (int i = poli.getDegree() - 1; i > 0; i--) {
if (((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() == 0) {
continue;
} else if (i == 1) {
ret = ret + "+" + ((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() + "X";
} else if (((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() != 0) {
if (((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() > 0) {
if (((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() == 1) {
ret = ret + "+" + "X^" + i;
} else {
ret = ret + "+" + ((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() + "X^"
+ i;
}
} else if (((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() < 0) {
if (((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() == -1) {
ret = ret + "-" + "X^" + i;
} else {
ret = ret + ((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() + "X^" + i;
}
}
}
}
int i = 0;
if (((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() >= 0) {
if (poli.getDegree() > 0)
ret = ret + "+";
ret = ret + ((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient();
} else if (((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient() < 0) {
ret = ret + ((IntegerCoefficient) poli.getCoefficient()[i]).getCoefficient();
}
return ret;
} else if (poli.getCoefficient()[0].getType() == TypeOfCoefficient.real) {
System.out.println("real");
if (poli.getDegree() > 0) {
if (((RealCoefficient) poli.getCoefficient()[poli.getDegree()]).getCoefficient() == 1) {
ret = "" + "X^" + poli.getDegree();
} else {
if (((RealCoefficient) poli.getCoefficient()[poli.getDegree()]).getCoefficient() == -1) {
ret = "" + "-X^" + poli.getDegree();
} else {
ret = "" + ((RealCoefficient) poli.getCoefficient()[poli.getDegree()]).getCoefficient() + "X^"
+ poli.getDegree();
}
}
}
for (int i = poli.getDegree() - 1; i > 0; i--) {
if (((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() == 0) {
continue;
} else if (i == 1) {
ret = ret + "+" + ((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() + "X";
} else if (((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() != 0) {
if (((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() > 0) {
if (((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() == 1) {
ret = ret + "+" + "X^" + i;
} else {
ret = ret + "+" + ((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() + "X^" + i;
}
} else if (((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() < 0) {
if (((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() == -1) {
ret = ret + "-" + "X^" + i;
} else {
ret = ret + ((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() + "X^" + i;
}
}
}
}
int i = 0;
if (((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() >= 0) {
if (poli.getDegree() > 0)
ret = ret + "+";
ret = ret + ((RealCoefficient) poli.getCoefficient()[i]).getCoefficient();
} else if (((RealCoefficient) poli.getCoefficient()[i]).getCoefficient() < 0) {
ret = ret + ((RealCoefficient) poli.getCoefficient()[i]).getCoefficient();
}
return ret;
}
return ret;
}
public static Coefficient[] transform(int[] arr) {
Coefficient[] c = new Coefficient[arr.length];
for (int i = 0; i < arr.length; i++) {
c[i] = new IntegerCoefficient(arr[i]);
}
return c;
}
public static int getIntElement(Polynomial p, int position) {
return ((IntegerCoefficient) (p.getCoefficient()[position])).getCoefficient();
}
public static double getRealElement(Polynomial p, int position) {
return ((RealCoefficient) (p.getCoefficient()[position])).getCoefficient();
}
}